package com.ruoyi.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;

/**
 * 支付订单（支付流水信息）对象 t_cw_pay_order
 * 
 * @author ruoyi
 * @date 2023-02-28
 */
public class TCwPayOrder extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键id */
    private Long id;

    /** 支付订单号 */
    @Excel(name = "支付订单号")
    private String orderNo;

    /** 交易账户：更改为相关商户名称 */
    @Excel(name = "交易账户：更改为相关商户名称")
    private String tradeAccount;

    /** 交易账户类型：暂定1:微信，2:支付宝，3:银行卡，4:拉卡拉（微信扫码和H5都是微信，支付宝扫码就是支付宝，认证就是银行卡，提现的时候是拉卡拉） */
    @Excel(name = "交易账户类型：暂定1:微信，2:支付宝，3:银行卡，4:拉卡拉", readConverterExp = "微=信扫码和H5都是微信，支付宝扫码就是支付宝，认证就是银行卡，提现的时候是拉卡拉")
    private Long tradeAccountType;

    /** 交易账号（出端的账号：如果是快捷支付：银行卡号，如果是支付宝微信扫码支付，因为取不到微信或者支付宝账号，拉卡拉返回的charge对象里面会返回一个发起支付的IP地址，所以暂定就用这个IP地址。提现的时候：拉卡拉的企业账户） */
    @Excel(name = "交易账号", readConverterExp = "出=端的账号：如果是快捷支付：银行卡号，如果是支付宝微信扫码支付，因为取不到微信或者支付宝账号，拉卡拉返回的charge对象里面会返回一个发起支付的IP地址，所以暂定就用这个IP地址。提现的时候：拉卡拉的企业账户")
    private String tradeAccountNo;

    /** 用户ID：根据类型来判断是哪种客户的ID(不一定是登录客户，而是这笔交易的对象)
租客付款的时候，是租客，企业充值提现是企业businessid */
    @Excel(name = "用户ID：根据类型来判断是哪种客户的ID(不一定是登录客户，而是这笔交易的对象) 租客付款的时候，是租客，企业充值提现是企业businessid")
    private Long userId;

    /** 交易涉及用户类型：1：租客个人用户（前端客户），2：企业商户（businessID） */
    @Excel(name = "交易涉及用户类型：1：租客个人用户", readConverterExp = "前=端客户")
    private Long userType;

    /** 操作类型：1：充值（企业充值），2：提现（企业提现），3：收款（企业收款计划），4：付款（企付款款计划） */
    @Excel(name = "操作类型：1：充值", readConverterExp = "企=业充值")
    private Long operationType;

    /** 支付方式, 1:微信扫码，2:支付宝扫码，3:微信公众号，4:认证支付，5:实时代付到银行卡，20:批量代付到银行卡 */
    @Excel(name = "支付方式, 1:微信扫码，2:支付宝扫码，3:微信公众号，4:认证支付，5:实时代付到银行卡，20:批量代付到银行卡")
    private Long payWay;

    /** 订单金额：支付订单金额 */
    @Excel(name = "订单金额：支付订单金额")
    private BigDecimal amount;

    /** 支付金额：用来记录用户实际支付金额，目前=订单金额就行。 */
    @Excel(name = "支付金额：用来记录用户实际支付金额，目前=订单金额就行。")
    private BigDecimal payAmount;

    /** 结算金额：平台这边定义字段，暂时不设值，拉卡拉对账文件里面也会有，存到导入的表里面，对账的时候显示拉卡拉那边的结算金额 */
    @Excel(name = "结算金额：平台这边定义字段，暂时不设值，拉卡拉对账文件里面也会有，存到导入的表里面，对账的时候显示拉卡拉那边的结算金额")
    private BigDecimal finalAmount;

    /** 优惠金额， 预留字段 */
    @Excel(name = "优惠金额， 预留字段")
    private BigDecimal discountAmount;

    /** 交易对手：入金(提现以外)的时候：海链物联，出金（提现）的时候是商户名称。 */
    @Excel(name = "交易对手：入金(提现以外)的时候：海链物联，出金", readConverterExp = "提=现")
    private String tradeUser;
    private String businessOrderPlanNo;

    public String getBusinessOrderPlanNo() {
        return businessOrderPlanNo;
    }

    public void setBusinessOrderPlanNo(String businessOrderPlanNo) {
        this.businessOrderPlanNo = businessOrderPlanNo;
    }

    /** 对手账号：入金的时候：海链的拉卡拉账号，出的时候是商户对应银行卡号（目前只有提现）。 */
    @Excel(name = "对手账号：入金的时候：海链的拉卡拉账号，出的时候是商户对应银行卡号", readConverterExp = "目=前只有提现")
    private String dsAccount;

    /** 交易渠道：暂时固定拉卡拉。 */
    @Excel(name = "交易渠道：暂时固定拉卡拉。")
    private String tradeQudao;

    /** 渠道订单号：拉卡拉生成的订单号，具体什么时候回传需要调查。 */
    @Excel(name = "渠道订单号：拉卡拉生成的订单号，具体什么时候回传需要调查。")
    private String qudaoOrderNo;

    /** 交易结果：接口回调或者返回的结果 1:处理中，2:成功，3:失败。 */
    @Excel(name = "交易结果：接口回调或者返回的结果 1:处理中，2:成功，3:失败。")
    private Long tradeResult;

    /** 返回码：系统记录，界面不展示。(充值或提现失败时的错误码) */
    @Excel(name = "返回码：系统记录，界面不展示。(充值或提现失败时的错误码)")
    private String returnCode;

    /** 返回信息(充值或提现失败时的错误消息) */
    @Excel(name = "返回信息(充值或提现失败时的错误消息)")
    private String returnMsg;

    /** 发起交易日期：调用拉卡拉下单时间。 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "发起交易日期：调用拉卡拉下单时间。", width = 30, dateFormat = "yyyy-MM-dd")
    private Date tradeDateFq;

    /** 执行交易日期：确认支付时间（认证支付的时候，输完三要素，确认支付按钮按下的时间，也即最后一次掉拉卡拉接口时间），扫码的时候因为是用户主动付款，不经过平台获取不到该时间，故没有不显示。 */
    @Excel(name = "执行交易日期：确认支付时间", readConverterExp = "认=证支付的时候，输完三要素，确认支付按钮按下的时间，也即最后一次掉拉卡拉接口时间")
    private Date tradeDateZx;

    /** 渠道支付时间：回调告诉系统处理结果的时间，如果回调参数里面没有就取系统时间。 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "渠道支付时间：回调告诉系统处理结果的时间，如果回调参数里面没有就取系统时间。", width = 30, dateFormat = "yyyy-MM-dd")
    private Date tradeDateZf;

    /** 支付截止日期：订单有效时间计算，二维码三分钟，H5因为是系统通知微信，所以自己传的时间，没穿就是空。其它都是1小时。根据发起交易日期来计算。 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "支付截止日期：订单有效时间计算，二维码三分钟，H5因为是系统通知微信，所以自己传的时间，没穿就是空。其它都是1小时。根据发起交易日期来计算。", width = 30, dateFormat = "yyyy-MM-dd")
    private Date tradeDateJz;

    /** 费率, 预留字段 */
    @Excel(name = "费率, 预留字段")
    private BigDecimal tradeRate;

    /** 手续费, 预留字段 */
    @Excel(name = "手续费, 预留字段")
    private BigDecimal commissionFee;

    /** 开始时间，设定为记录创建时间，作为业务开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "开始时间，设定为记录创建时间，作为业务开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date beginTime;

    /** 结束时间，最后一次业务处理时间，比如支付回调以后 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结束时间，最后一次业务处理时间，比如支付回调以后", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endTime;

    /** 审核状态：1=待审核，2=审核通过，3=审核不通过，100=系统自动审核，预留字段，暂时自动设置为100 */
    @Excel(name = "审核状态：1=待审核，2=审核通过，3=审核不通过，100=系统自动审核，预留字段，暂时自动设置为100")
    private Long checkState;

    /** 审核时间，预留字段，暂时自动设置为记录创建的系统时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "审核时间，预留字段，暂时自动设置为记录创建的系统时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date checkTime;

    /** 审核用户ID */
    @Excel(name = "审核用户ID")
    private String checkUserid;

    /** 审核失败原因 */
    @Excel(name = "审核失败原因")
    private String checkFailReason;

    /** 外部订单号：微信/支付宝/银联的交易号，预留字段，目前同渠道订单号，暂时不设置 */
    @Excel(name = "外部订单号：微信/支付宝/银联的交易号，预留字段，目前同渠道订单号，暂时不设置")
    private String outOrderNo;

    /** 对账状态：1=未对账，2=已对账，3=待结算，4=已结算 */
    @Excel(name = "对账状态：1=未对账，2=已对账，3=待结算，4=已结算")
    private Long dzState;

    /** 记账凭证：支付接口回调更新支付状态的时候：已记账的才参与对账。交易流水号+100（未记账）（自动） 交易流水号+101（已记账）（自动）交易流水号+111（已记账）（手动） */
    @Excel(name = "记账凭证：支付接口回调更新支付状态的时候：已记账的才参与对账。交易流水号+100", readConverterExp = "未=记账")
    private String certificateJz;

    /** 商品信息 */
    @Excel(name = "商品信息")
    private String productSubject;

    /** 商品信息 */
    @Excel(name = "商品信息")
    private String productBody;

    /** 商户可结算金额（入金的时候，可以结算给商户虚拟账户的金额，比如商户充值金额，租户缴费金额，对账和结算时候用, 为0的时候，表示没有结算金额。
如果该笔费用不是结算给商户的，比如有租约保理的房租，则该笔费用不包含在可结算金额中。） */
    @Excel(name = "商户可结算金额", readConverterExp = "入=金的时候，可以结算给商户虚拟账户的金额，比如商户充值金额，租户缴费金额，对账和结算时候用,,为=0的时候，表示没有结算金额。 如果该笔费用不是结算给商户的，比如有租约保理的房租，则该笔费用不包含在可结算金额中。")
    private BigDecimal canClearingAmount;

    /** 备注 */
    @Excel(name = "备注")
    private String remarks;

    /** 预留字段1 */
    private Date reserve1;

    /** 预留字段2 */
    private Long reserve2;

    /** 预留字段3 */
    private String reserve3;

    /** 预留字段4 */
    private String reserve4;

    /** 预留字段5 */
    private String reserve5;

    /** 删除标识。0:未删除，1：删除 */
    @Excel(name = "删除标识。0:未删除，1：删除")
    private Integer delFlg;

    /** 创建用户ID */
    @Excel(name = "创建用户ID")
    private Long createUserid;

    /** 更新用户ID */
    @Excel(name = "更新用户ID")
    private Long updateUserid;

    public void setId(Long id) 
    {
        this.id = id;
    }

    public Long getId() 
    {
        return id;
    }
    public void setOrderNo(String orderNo) 
    {
        this.orderNo = orderNo;
    }

    public String getOrderNo() 
    {
        return orderNo;
    }
    public void setTradeAccount(String tradeAccount) 
    {
        this.tradeAccount = tradeAccount;
    }

    public String getTradeAccount() 
    {
        return tradeAccount;
    }
    public void setTradeAccountType(Long tradeAccountType) 
    {
        this.tradeAccountType = tradeAccountType;
    }

    public Long getTradeAccountType() 
    {
        return tradeAccountType;
    }
    public void setTradeAccountNo(String tradeAccountNo) 
    {
        this.tradeAccountNo = tradeAccountNo;
    }

    public String getTradeAccountNo() 
    {
        return tradeAccountNo;
    }
    public void setUserId(Long userId) 
    {
        this.userId = userId;
    }

    public Long getUserId() 
    {
        return userId;
    }
    public void setUserType(Long userType) 
    {
        this.userType = userType;
    }

    public Long getUserType() 
    {
        return userType;
    }
    public void setOperationType(Long operationType) 
    {
        this.operationType = operationType;
    }

    public Long getOperationType() 
    {
        return operationType;
    }
    public void setPayWay(Long payWay) 
    {
        this.payWay = payWay;
    }

    public Long getPayWay() 
    {
        return payWay;
    }
    public void setAmount(BigDecimal amount) 
    {
        this.amount = amount;
    }

    public BigDecimal getAmount() 
    {
        return amount;
    }
    public void setPayAmount(BigDecimal payAmount) 
    {
        this.payAmount = payAmount;
    }

    public BigDecimal getPayAmount() 
    {
        return payAmount;
    }
    public void setFinalAmount(BigDecimal finalAmount) 
    {
        this.finalAmount = finalAmount;
    }

    public BigDecimal getFinalAmount() 
    {
        return finalAmount;
    }
    public void setDiscountAmount(BigDecimal discountAmount) 
    {
        this.discountAmount = discountAmount;
    }

    public BigDecimal getDiscountAmount() 
    {
        return discountAmount;
    }
    public void setTradeUser(String tradeUser) 
    {
        this.tradeUser = tradeUser;
    }

    public String getTradeUser() 
    {
        return tradeUser;
    }
    public void setDsAccount(String dsAccount) 
    {
        this.dsAccount = dsAccount;
    }

    public String getDsAccount() 
    {
        return dsAccount;
    }
    public void setTradeQudao(String tradeQudao) 
    {
        this.tradeQudao = tradeQudao;
    }

    public String getTradeQudao() 
    {
        return tradeQudao;
    }
    public void setQudaoOrderNo(String qudaoOrderNo) 
    {
        this.qudaoOrderNo = qudaoOrderNo;
    }

    public String getQudaoOrderNo() 
    {
        return qudaoOrderNo;
    }
    public void setTradeResult(Long tradeResult) 
    {
        this.tradeResult = tradeResult;
    }

    public Long getTradeResult() 
    {
        return tradeResult;
    }
    public void setReturnCode(String returnCode) 
    {
        this.returnCode = returnCode;
    }

    public String getReturnCode() 
    {
        return returnCode;
    }
    public void setReturnMsg(String returnMsg) 
    {
        this.returnMsg = returnMsg;
    }

    public String getReturnMsg() 
    {
        return returnMsg;
    }
    public void setTradeDateFq(Date tradeDateFq) 
    {
        this.tradeDateFq = tradeDateFq;
    }

    public Date getTradeDateFq() 
    {
        return tradeDateFq;
    }
    public void setTradeDateZx(Date tradeDateZx) 
    {
        this.tradeDateZx = tradeDateZx;
    }

    public Date getTradeDateZx() 
    {
        return tradeDateZx;
    }
    public void setTradeDateZf(Date tradeDateZf) 
    {
        this.tradeDateZf = tradeDateZf;
    }

    public Date getTradeDateZf() 
    {
        return tradeDateZf;
    }
    public void setTradeDateJz(Date tradeDateJz) 
    {
        this.tradeDateJz = tradeDateJz;
    }

    public Date getTradeDateJz() 
    {
        return tradeDateJz;
    }
    public void setTradeRate(BigDecimal tradeRate) 
    {
        this.tradeRate = tradeRate;
    }

    public BigDecimal getTradeRate() 
    {
        return tradeRate;
    }
    public void setCommissionFee(BigDecimal commissionFee) 
    {
        this.commissionFee = commissionFee;
    }

    public BigDecimal getCommissionFee() 
    {
        return commissionFee;
    }
    public void setBeginTime(Date beginTime) 
    {
        this.beginTime = beginTime;
    }

    public Date getBeginTime() 
    {
        return beginTime;
    }
    public void setEndTime(Date endTime) 
    {
        this.endTime = endTime;
    }

    public Date getEndTime() 
    {
        return endTime;
    }
    public void setCheckState(Long checkState) 
    {
        this.checkState = checkState;
    }

    public Long getCheckState() 
    {
        return checkState;
    }
    public void setCheckTime(Date checkTime) 
    {
        this.checkTime = checkTime;
    }

    public Date getCheckTime() 
    {
        return checkTime;
    }
    public void setCheckUserid(String checkUserid) 
    {
        this.checkUserid = checkUserid;
    }

    public String getCheckUserid() 
    {
        return checkUserid;
    }
    public void setCheckFailReason(String checkFailReason) 
    {
        this.checkFailReason = checkFailReason;
    }

    public String getCheckFailReason() 
    {
        return checkFailReason;
    }
    public void setOutOrderNo(String outOrderNo) 
    {
        this.outOrderNo = outOrderNo;
    }

    public String getOutOrderNo() 
    {
        return outOrderNo;
    }
    public void setDzState(Long dzState) 
    {
        this.dzState = dzState;
    }

    public Long getDzState() 
    {
        return dzState;
    }
    public void setCertificateJz(String certificateJz) 
    {
        this.certificateJz = certificateJz;
    }

    public String getCertificateJz() 
    {
        return certificateJz;
    }
    public void setProductSubject(String productSubject) 
    {
        this.productSubject = productSubject;
    }

    public String getProductSubject() 
    {
        return productSubject;
    }
    public void setProductBody(String productBody) 
    {
        this.productBody = productBody;
    }

    public String getProductBody() 
    {
        return productBody;
    }
    public void setCanClearingAmount(BigDecimal canClearingAmount) 
    {
        this.canClearingAmount = canClearingAmount;
    }

    public BigDecimal getCanClearingAmount() 
    {
        return canClearingAmount;
    }
    public void setRemarks(String remarks) 
    {
        this.remarks = remarks;
    }

    public String getRemarks() 
    {
        return remarks;
    }
    public void setReserve1(Date reserve1) 
    {
        this.reserve1 = reserve1;
    }

    public Date getReserve1() 
    {
        return reserve1;
    }
    public void setReserve2(Long reserve2) 
    {
        this.reserve2 = reserve2;
    }

    public Long getReserve2() 
    {
        return reserve2;
    }
    public void setReserve3(String reserve3) 
    {
        this.reserve3 = reserve3;
    }

    public String getReserve3() 
    {
        return reserve3;
    }
    public void setReserve4(String reserve4) 
    {
        this.reserve4 = reserve4;
    }

    public String getReserve4() 
    {
        return reserve4;
    }
    public void setReserve5(String reserve5) 
    {
        this.reserve5 = reserve5;
    }

    public String getReserve5() 
    {
        return reserve5;
    }
    public void setDelFlg(Integer delFlg) 
    {
        this.delFlg = delFlg;
    }

    public Integer getDelFlg() 
    {
        return delFlg;
    }
    public void setCreateUserid(Long createUserid) 
    {
        this.createUserid = createUserid;
    }

    public Long getCreateUserid() 
    {
        return createUserid;
    }
    public void setUpdateUserid(Long updateUserid) 
    {
        this.updateUserid = updateUserid;
    }

    public Long getUpdateUserid() 
    {
        return updateUserid;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("orderNo", getOrderNo())
            .append("tradeAccount", getTradeAccount())
            .append("tradeAccountType", getTradeAccountType())
            .append("tradeAccountNo", getTradeAccountNo())
            .append("userId", getUserId())
            .append("userType", getUserType())
            .append("operationType", getOperationType())
            .append("payWay", getPayWay())
            .append("amount", getAmount())
            .append("payAmount", getPayAmount())
            .append("finalAmount", getFinalAmount())
            .append("discountAmount", getDiscountAmount())
            .append("tradeUser", getTradeUser())
            .append("dsAccount", getDsAccount())
            .append("tradeQudao", getTradeQudao())
            .append("qudaoOrderNo", getQudaoOrderNo())
            .append("tradeResult", getTradeResult())
            .append("returnCode", getReturnCode())
            .append("returnMsg", getReturnMsg())
            .append("tradeDateFq", getTradeDateFq())
            .append("tradeDateZx", getTradeDateZx())
            .append("tradeDateZf", getTradeDateZf())
            .append("tradeDateJz", getTradeDateJz())
            .append("tradeRate", getTradeRate())
            .append("commissionFee", getCommissionFee())
            .append("beginTime", getBeginTime())
            .append("endTime", getEndTime())
            .append("checkState", getCheckState())
            .append("checkTime", getCheckTime())
            .append("checkUserid", getCheckUserid())
            .append("checkFailReason", getCheckFailReason())
            .append("outOrderNo", getOutOrderNo())
            .append("dzState", getDzState())
            .append("certificateJz", getCertificateJz())
            .append("productSubject", getProductSubject())
            .append("productBody", getProductBody())
            .append("canClearingAmount", getCanClearingAmount())
            .append("remarks", getRemarks())
            .append("reserve1", getReserve1())
            .append("reserve2", getReserve2())
            .append("reserve3", getReserve3())
            .append("reserve4", getReserve4())
            .append("reserve5", getReserve5())
            .append("delFlg", getDelFlg())
            .append("createUserid", getCreateUserid())
            .append("createTime", getCreateTime())
            .append("updateUserid", getUpdateUserid())
            .append("updateTime", getUpdateTime())
            .toString();
    }
}
